#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //On définit un fond noir (plus pratique pour l'utilisation et fait moins mal aux yeux)
    QPalette p = QPalette();
    p.setColor(QPalette::Window,Qt::black);

    this->setPalette(p);


    //On rentre les informations pour les paramètres systèmes
    QSettings s;
    //Si le mot de passe n'est pas défini, on le demande.
    QString pass = s.value("pass").toString();

    if(pass == ""){
        while(pass == ""){

            pass = QInputDialog::getText(this,"Nouveau mot de passe","Veuillez taper un mot de passe pour cette babasse.",QLineEdit::Password);
        }
        s.setValue("pass",QVariant(QCryptographicHash::hash(pass.toUtf8(),QCryptographicHash::Sha1)).toString());
    }



    //On ouvre la connexion à la base de donnée
    this->ouvrir_base();


    //On filtre les évenements d'entré des fam's (pour gérer le clic qui ouvre la page Admin)
    ui->lineEdit->installEventFilter(this);

    majTextEdits();

    //On donne le focus à l'entrée des fam's
    ui->lineEdit->setFocus();

}

Widget::~Widget()
{
    delete ui;
}



bool Widget::eventFilter(QObject *obj, QEvent *event)
{
    // On met un filtre sur le clavier
    if(event->type() == QEvent::KeyPress){

        event->accept();
        // On met un filtre sur les touches F0 qui correspondent à une proms et on extrait la ligne concernée
        QKeyEvent *e = static_cast<QKeyEvent *>(event);
        int k = e->key() - Qt::Key_F1;
        if(modelProms->rowCount() > k && k >= 0){
            // On ouvre la fenêtre de bucquage avec la proms concernée
            OuvrirBucquage(k);
        }

        // Si c'est la touche entrée on vérifie la fams et le cas échéant on lance la procédure de réouverture de programme
        if((e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return)&& ui->lineEdit->text() == "999" ){
            fermer_base();
            ouvrir_base();
            majTextEdits();
            QMessageBox::information(this,"Reset","La base a été reconnectée.");
            ui->lineEdit->setText("");
            ui->lineEdit->setFocus();
            ui->lineEdit->setCursorPosition(0);
        }

        if(e->key() == Qt::Key_Q && e->modifiers() == Qt::ControlModifier){
            this->close();
        }

        //Si l'évenement ne correspond pas (ou que le numéro est erroné) on laisse l'objet le traiter
        return QObject::eventFilter(obj,event);

    }else{
        //Si l'évenement ne correspond pas (ou que le numéro est erroné) on laisse l'objet le traiter
        return QObject::eventFilter(obj,event);
    }
}

void Widget::focusInEvent(QFocusEvent *e)
{
    ui->lineEdit->setFocus();
}

void Widget::OuvrirBucquage(int row)
{

    // On récupère la proms
    QString prom;
    prom = modelProms->index(row,0).data().toString();

    //On créer le pg correspondant à la fam's et à la prom's demandée (on ne demande pas le mode administrateur)
    Pg *pg = new Pg(ui->lineEdit->text().toInt(),prom,db);

    //On test le code pin
    bool ok = true;
    int pin = pg->getPin();
    if(pin > 0)
    {
        int pin2 = 0;
        while(ok && pin != pin2)
        {
            pin2 = QInputDialog::getInt(this, "Code PIN", "Entrée votre code PIN de bucquage", 0, 0, 9999, 1, &ok);
        }
    }

    //On réinitialise le champ fam's
    ui->lineEdit->setText("");
    ui->lineEdit->setFocus();
    ui->lineEdit->setCursorPosition(0);

    //On créer la fenetre de bucquage
    if(ok)
    {
        emit identifier(pg);
    }


}


void Widget::ouvrir_base(){


    db = QSqlDatabase::database("guest");

    modelProms = new PromsModel(this);

    ui->tableView->setModel(modelProms);
}



void Widget::fermer_base()  {
    //On détruit la connexion existante
    QSqlDatabase::database("guest").close();
    QSqlDatabase::removeDatabase(QSqlDatabase::database().connectionName());
    delete modelProms;
}


void Widget::on_lineEdit_textChanged(const QString &arg1){

    // On change la fams du model
    modelProms->setFams(db,arg1.toInt());

    ui->tableView->resizeColumnsToContents();

}

void Widget::majTextEdits(){

    QSettings set;
    prefsBlocDroite = set.value("prefBlocDroite").toString().split(";");
    prefsBlocGauche = set.value("prefBlocGauche").toString().split(";");


    QString s = "";
    for(int i=0; i < prefsBlocDroite.size(); i++){
        s += ModuleAccueil::toHtml(prefsBlocDroite.at(i));
    }

    ui->textEdit->setHtml(s);

    QString s2 = "";
    for(int i=0; i < prefsBlocGauche.size(); i++){
        s2 += ModuleAccueil::toHtml(prefsBlocGauche.at(i));
    }

    QSettings settings;
    ui->textEdit_2->setHtml(s2 + settings.value("message").toString());

}


